﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using System.Text.RegularExpressions;
using negocios;
using objetos;
using publico;
using System.Data;



namespace softsales.pagina.relatorio
{
    public partial class relatorio_formulario : System.Web.UI.Page
    {
        BLL_TB_RELATORIO b_tb_relatorio = new BLL_TB_RELATORIO();
        OBJ_TB_RELATORIO o_tb_relatorio = new OBJ_TB_RELATORIO();

        BLL_TABLE b_table = new BLL_TABLE();
        OBJ_TABLE o_table = new OBJ_TABLE();

        BLL_TB_RELATORIO_FORMA_IMPRESSAO b_tb_relatorio_forma_impressao = new BLL_TB_RELATORIO_FORMA_IMPRESSAO();
        BLL_TB_RELATORIO_TIPO b_tb_relatorio_tipo = new BLL_TB_RELATORIO_TIPO();

        protected void Page_Load(object sender, EventArgs e)
        {

            if (true)
            {
                if (!IsPostBack)
                {
                    PUB_MENSAGEM.Ocultar();

                    b_tb_relatorio_forma_impressao.PreencheControle(DDL_ID_FORMA_IMPRESSAO, false);
                    b_tb_relatorio_tipo.PreencheControle(DDL_ID_TIPO_RELATORIO, false);

                    PNL_ERRO.Visible = false;
                    PNL_SUCESSO.Visible = false;                    

                    if (Request["id"] != null)
                    {
                        LBL_TITULO_PAGINA.Text = "Editar Relatório";
                        if (Request["id"]!= null)
                        {
                            Editar(Request["id"].ToString());
                        }
                    }
                    else
                    {
                        TXT_PATH_URL.Text = "~/relatorio/";

                        TXT_MARGEM_INFERIOR.Text = "50";
                        TXT_MARGEM_SUPERIOR.Text = "50";
                        TXT_MARGEM_DIREITA.Text = "20";
                        TXT_MARGEM_ESQUERDA.Text = "20";
                        TXT_TAMANHO_TITULO.Text = "10";
                        TXT_TAMANHO_RODAPE.Text = "10";
                        TXT_TAMANHO_TEXTO.Text = "7";
                        TXT_TAMANHO_CAMPO.Text = "8";
                        CHK_SIT_LOGO.Checked = true;

                       
                        
                        LBL_TITULO_PAGINA.Text = "Incluir Relatório";


                        PreencheListBoxTabela();

                    }

                }
            }
        }

        private void PreencheListBoxCampos(String tabela)
        {
            LST_CAMPOS.Items.Clear();
            foreach (string  col in b_table.Campos(tabela))
            {
                LST_CAMPOS.Items.Add(col);

            }
            LST_CAMPOS.DataBind();

        }

        private void PreencheListBoxOrdenar(String tabela)
        {
            LST_ORDENAR.Items.Clear();
            
            foreach (string col in b_table.Campos(tabela))
            {
                LST_ORDENAR.Items.Add(col);

            }
            LST_ORDENAR.DataBind();

        }

        private void PreencheListBoxTabela()
        {
            try
            {
                foreach (String tabela in b_table.Tabelas())
                {
                    LST_TABELA.Items.Add(tabela.ToString());
                }
                LST_TABELA.DataBind();
            }
            catch (Exception)
            {
                
                throw;
            }
            
        }

        private void Editar(String id)
        {


            o_tb_relatorio = b_tb_relatorio.SelecionarObjetoPorId(Convert.ToInt32(id));
            HF_ID.Value = o_tb_relatorio.id.ToString();

            TXT_MARGEM_DIREITA.Text = o_tb_relatorio.margem_direita.ToString();
            TXT_MARGEM_ESQUERDA.Text = o_tb_relatorio.margem_esquerda.ToString();
            TXT_MARGEM_INFERIOR.Text = o_tb_relatorio.margem_inferior.ToString();
            TXT_MARGEM_SUPERIOR.Text = o_tb_relatorio.margem_superior.ToString();
            TXT_NOME_ARQUIVO.Text = o_tb_relatorio.nome_arquivo.ToString();
            TXT_NOME_RELATORIO.Text = o_tb_relatorio.nome_relatorio.ToString();
            TXT_PATH_URL.Text = o_tb_relatorio.path_url.ToString();
            TXT_TAMANHO_CAMPO.Text = o_tb_relatorio.tamanho_campo.ToString();
            TXT_TAMANHO_RODAPE.Text = o_tb_relatorio.tamanho_rodape.ToString();
            TXT_TAMANHO_TEXTO.Text = o_tb_relatorio.tamanho_texto.ToString();
            TXT_TAMANHO_TITULO.Text = o_tb_relatorio.tamanho_titulo.ToString();
            TXT_TITULO_RELATORIO.Text = o_tb_relatorio.titulo_relatorio.ToString();

            DDL_ID_FORMA_IMPRESSAO.SelectedValue = o_tb_relatorio.id_forma_impressao.ToString();
            DDL_ID_TIPO_RELATORIO.SelectedValue = o_tb_relatorio.id_tipo_relatorio.ToString();

            PreencheListBoxTabela();

            TXT_QUERY.Text = o_tb_relatorio.query.ToString();

        }

        protected void BTN_SALVAR_Click(object sender, EventArgs e)
        {
            bool erro = false;

            List<string> coluna = new List<string>();
            List<string> tamanho = new List<string>();

            string[] col = TXT_COLUNA_TAMANHO.Text.Split(new char[] { ',' });
            int j = 0;

            try
            {
                foreach (string s in col)
                {
                    j++;
                }

                coluna = ValidarQuery();

                if (!Equals(j, coluna.Count))
                {
                    PNL_ERRO.Visible = true;
                    PNL_SUCESSO.Visible = false;
                    LBL_ERRO.Text = "A quantidade de colunas do relatório é diferente da quantidade do tamanho de colunas.";
                    erro = true;
                }

                if (!erro)
                {

                    if (DDL_ID_FORMA_IMPRESSAO.SelectedValue != string.Empty && DDL_ID_TIPO_RELATORIO.SelectedValue != string.Empty)
                    {

                        o_tb_relatorio.id_forma_impressao = Convert.ToInt32(DDL_ID_FORMA_IMPRESSAO.SelectedValue);
                        o_tb_relatorio.id_tipo_relatorio = Convert.ToInt32(DDL_ID_TIPO_RELATORIO.SelectedValue);
                        o_tb_relatorio.margem_direita = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_MARGEM_DIREITA.ToString()));
                        o_tb_relatorio.margem_esquerda = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_MARGEM_ESQUERDA.ToString()));
                        o_tb_relatorio.margem_inferior = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_MARGEM_INFERIOR.ToString()));
                        o_tb_relatorio.margem_superior = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_MARGEM_SUPERIOR.ToString()));
                        o_tb_relatorio.nome_arquivo = TXT_NOME_ARQUIVO.ToString();
                        o_tb_relatorio.nome_relatorio = TXT_NOME_RELATORIO.ToString();
                        o_tb_relatorio.path_url = TXT_PATH_URL.ToString();
                        o_tb_relatorio.sit_logo = Convert.ToBoolean(CHK_SIT_LOGO.Checked);
                        o_tb_relatorio.titulo_relatorio = TXT_TITULO_RELATORIO.ToString();
                        o_tb_relatorio.tamanho_campo = Convert.ToInt32(TXT_TAMANHO_CAMPO.ToString());
                        o_tb_relatorio.tamanho_rodape = Convert.ToInt32(TXT_TAMANHO_RODAPE.ToString());
                        o_tb_relatorio.tamanho_texto = Convert.ToInt32(TXT_TAMANHO_TEXTO.ToString());
                        o_tb_relatorio.tamanho_titulo = Convert.ToInt32(TXT_TAMANHO_TITULO.ToString());
                        o_tb_relatorio.query = TXT_QUERY.Text;
                        o_tb_relatorio.coluna_relatorio = TXT_COLUNA_RELATORIO.Text;
                        o_tb_relatorio.coluna_tamanho = TXT_COLUNA_TAMANHO.Text;


                        if (HF_ID.Value != string.Empty)
                        {

                            o_tb_relatorio.id = Convert.ToInt32(HF_ID.Value);
                            b_tb_relatorio.Alterar(o_tb_relatorio);
                            PUB_MENSAGEM.Exibir("Alteração realizada com sucesso", 1);
                        }
                        else
                        {
                            CHK_SIT_LOGO.Checked = true;
                            b_tb_relatorio.Incluir(o_tb_relatorio);
                            PUB_MENSAGEM.Exibir("Inclusão realizada com sucesso", 1);
                        }

                        Response.Redirect("default.aspx", false);

                    }


                }




            }
            catch (Exception)
            {
                
                throw;
            }



            

        }

        protected void BTN_CANCELAR_Click(object sender, EventArgs e)
        {
            Response.Redirect("default.aspx", false);
        }

        protected void LST_TABELA_SelectedIndexChanged(object sender, EventArgs e)
        {
            LST_CAMPOS.Items.Clear();
            LST_ORDENAR.Items.Clear();
            if (LST_TABELA.SelectedValue != string.Empty)
            {

                TXT_QUERY.Text = string.Format(" SELECT * FROM {0}", LST_TABELA.SelectedValue);
                PreencheListBoxCampos(LST_TABELA.SelectedValue);
                PreencheListBoxOrdenar(LST_TABELA.SelectedValue);
            }
        }

        protected void LST_CAMPOS_SelectedIndexChanged(object sender, EventArgs e)
        {          
            if (LST_TABELA.SelectedValue != string.Empty && LST_CAMPOS.SelectedValue != string.Empty)
            {
                List<string> col = ListaCamposSelecionado();
                List<string> ord = ListaOrdenacaoSelecionado();
                string tabela = LST_TABELA.SelectedValue;
                Query(tabela, col, ord);
                
            }
        }

        private void Query(string tabela, List<string> col, List<string> ord)
        {            
            String colunas = string.Join(",", col.ToArray()).ToString();
            String ordenar = string.Join(",", ord.ToArray()).ToString();

            if (ord.Count == 0)
            {
                TXT_QUERY.Text = string.Format("SELECT {0} FROM {1}", colunas, tabela);
            }
            else
            {
                TXT_QUERY.Text = string.Format("SELECT {0} FROM {1} ORDER BY {2}", colunas, tabela, ordenar);
            }
            
        }

        private List<string> ListaCamposSelecionado()
        {
            List<string> col = new List<string>();
            foreach (ListItem item in LST_CAMPOS.Items)
            {
                if (item.Selected)
                {
                    col.Add(item.Value);
                }

            }
            return col;
        }
      

        protected void LST_ORDENAR_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (LST_ORDENAR.SelectedValue != string.Empty)
            {

                List<string> col = ListaCamposSelecionado();
                List<string> ord = ListaOrdenacaoSelecionado();
                string tabela = LST_TABELA.SelectedValue;
                Query(tabela, col, ord);
            }
        }   

        private List<string> ListaOrdenacaoSelecionado()
        {
            List<string> ord = new List<string>();
            foreach (ListItem item in LST_ORDENAR.Items)
            {
                if (item.Selected)
                {
                    ord.Add(item.Value);
                }

            }
            return ord;
        }

        protected void BTN_EXECUTAR_Click(object sender, EventArgs e)
        {
            List<string> lista = new List<string>();
            List<string> tamanho = new List<string>();
            String coluna = string.Empty;
            lista = ValidarQuery();
            if (lista.Count > 0)
            {
                PNL_SUCESSO.Visible = true;
                PNL_ERRO.Visible = false;
                
                coluna = string.Join(",",lista.ToArray()).ToString();
                LBL_SUCESSO.Text = "Êxito! Colunas do Relatório : " + coluna;
                TXT_COLUNA_RELATORIO.Text = coluna;

                for (int i = 0; i <= lista.Count  - 1; i++)
                {
                    tamanho.Add(string.Format("{0}",i + 1));
                }

                TXT_COLUNA_TAMANHO.Text = string.Join(",", tamanho.ToArray()).ToString();

            }
            else
            {
                PNL_SUCESSO.Visible = false;
                PNL_ERRO.Visible = true;
                LBL_ERRO.Text = "Não foi possível executar a consulta.";
                
            }

            
        }


        private List<string> ValidarQuery()
        {
            DataSet ds = new DataSet();
            List<string> lista = new List<string>();

            if (TXT_QUERY.Text != string.Empty)
            {
                ds = b_tb_relatorio.ValidarQuery(TXT_QUERY.Text);

                if (ds != null)
                {
                    foreach (DataColumn dc in ds.Tables[0].Columns)
                    {
                        lista.Add(dc.ColumnName.ToString());

                    }
                }

            }
            return lista;
            
        }

        protected void TXT_QUERY_TextChanged(object sender, EventArgs e)
        {

        }
     
       

    }
}